java.lang প্যাকেজ Java এর একটি গুরুত্বপূর্ণ এবং ডিফল্ট প্যাকেজ যা Java প্রোগ্রামিং ভাষায় প্রয়োজনীয় অনেক মৌলিক ক্লাস সরবরাহ করে। এই প্যাকেজে অন্তর্ভুক্ত ক্লাসগুলি Java প্রোগ্রামের জন্য অপরিহার্য, যেমন:
StringMathSystemThreadStringBuilderObjectException
এছাড়া, String ক্লাস java.lang প্যাকেজের অন্যতম গুরুত্বপূর্ণ এবং ব্যাপকভাবে ব্যবহৃত ক্লাস। এটি স্ট্রিং (অক্ষরের সিকোয়েন্স) সংরক্ষণ এবং পরিচালনা করার জন্য ব্যবহৃত হয়। Java-তে স্ট্রিং প্রাথমিকভাবে immutable (অপরিবর্তনীয়) এবং object-oriented।
String ক্লাস:
String ক্লাস Java-তে অক্ষরের সিকোয়েন্স (sequence of characters) তৈরি করার জন্য ব্যবহৃত হয়। এটি immutable হওয়ায় একবার একটি স্ট্রিং অবজেক্ট তৈরি হলে তার মান পরিবর্তন করা যায় না। এর পরিবর্তে, স্ট্রিং সম্পর্কিত যে কোনো পরিবর্তন নতুন স্ট্রিং অবজেক্ট তৈরি করে।
String ক্লাসের কিছু গুরুত্বপূর্ণ মেথড:
length(): স্ট্রিংয়ের দৈর্ঘ্য (অক্ষরের সংখ্যা) প্রদান করে।
String str = "Hello"; System.out.println(str.length()); // Output: 5charAt(int index): নির্দিষ্ট ইনডেক্সের অক্ষর প্রদান করে।
char c = str.charAt(0); // Output: Hsubstring(int start, int end): স্ট্রিংয়ের নির্দিষ্ট অংশ (sub-string) প্রদান করে।
String subStr = str.substring(1, 4); // Output: elltoUpperCase() এবং toLowerCase(): স্ট্রিংয়ের সমস্ত অক্ষরকে বড় হাতের অথবা ছোট হাতের অক্ষরে রূপান্তরিত করে।
System.out.println(str.toUpperCase()); // Output: HELLO System.out.println(str.toLowerCase()); // Output: helloequals(): দুটি স্ট্রিংয়ের মান তুলনা করে।
String str1 = "Hello"; String str2 = "Hello"; System.out.println(str1.equals(str2)); // Output: trueconcat(): দুটি স্ট্রিং একত্রিত করে।
String str3 = "World"; String result = str.concat(" " + str3); // Output: Hello World
String এবং Immutable কনসেপ্ট:
Immutable কনসেপ্টের মানে হলো, যখন কোনো অবজেক্ট immutable হয়, তখন সেই অবজেক্টের অবস্থা পরিবর্তন করা সম্ভব হয় না। String ক্লাস Java-তে একটি immutable ক্লাস, যার মানে হলো একবার স্ট্রিং অবজেক্ট তৈরি হলে তার মান পরিবর্তন করা সম্ভব নয়। যখনই আপনি একটি নতুন স্ট্রিং মান অ্যাসাইন করেন, তখন একটি নতুন স্ট্রিং অবজেক্ট তৈরি হয় এবং আগের অবজেক্টটি অপরিবর্তিত থাকে।
Immutable String উদাহরণ:
public class ImmutableStringExample {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = str1;
str1 = str1 + " World"; // A new String object is created
System.out.println("str1: " + str1); // Output: Hello World
System.out.println("str2: " + str2); // Output: Hello
}
}
এখানে, যখন আমরা str1 এর মান পরিবর্তন করেছি, তখন একটি নতুন স্ট্রিং অবজেক্ট তৈরি হয়েছে এবং str1 নতুন মান "Hello World" ধারণ করেছে। কিন্তু str2 এর মান আগের মতো "Hello" রয়ে গেছে।
String-এর Immutable হওয়ার সুবিধা:
- Thread-Safety:
- যেহেতু String অবজেক্টের মান পরিবর্তন করা যায় না, তাই একাধিক থ্রেড যদি একই স্ট্রিং অবজেক্টে কাজ করে, তাহলে এটি স্বয়ংক্রিয়ভাবে thread-safe হয়। এর মানে, একাধিক থ্রেড একই স্ট্রিং অবজেক্টে কাজ করার পরেও কোনো ধরনের ডেটা দুর্নীতি বা প্রতিদ্বন্দ্বিতা (race condition) হবে না।
- Memory Efficiency:
- String অবজেক্টগুলো সাধারণত String Pool এ রাখা হয়। একবার কোনো স্ট্রিং মান তৈরি হলে, সিস্টেমটি এটি পুনরায় ব্যবহার করে এবং একই মানের জন্য নতুন স্ট্রিং অবজেক্ট তৈরি করা হয় না, ফলে মেমরি সাশ্রয় হয়।
- Security:
- যেহেতু স্ট্রিং অবজেক্টের মান পরিবর্তনযোগ্য নয়, তাই এটি নিরাপদ। উদাহরণস্বরূপ, যদি স্ট্রিংটি কোনো পাসওয়ার্ড বা সেনসিটিভ ডেটা ধারণ করে, তবে এর মান পরিবর্তন করা যাবে না, ফলে এটি নিরাপদ থাকে।
String Mutable কনসেপ্ট:
যেহেতু String ইমিউটেবল, কিছু পরিস্থিতিতে যদি আপনাকে স্ট্রিংয়ের মানে বারবার পরিবর্তন করতে হয়, তবে StringBuffer বা StringBuilder ক্লাস ব্যবহার করা উচিত। এই ক্লাসগুলো মিউটেবল, মানে এগুলোর অবজেক্টগুলির মান পরিবর্তন করা যায়।
StringBuilder উদাহরণ:
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // StringBuilder modifies its content directly
System.out.println(sb); // Output: Hello World
}
}
এখানে, StringBuilder ক্লাসের append() মেথড ব্যবহার করে স্ট্রিংয়ের মান পরিবর্তন করা হয়েছে, যা mutable।
- String ক্লাস immutable হওয়ায়, একবার এর মান সেট করা হলে তার পরবর্তী কোনো পরিবর্তন করা সম্ভব নয়।
- Immutable কনসেপ্টের মাধ্যমে স্ট্রিংয়ের নিরাপত্তা এবং থ্রেড-সেফটি নিশ্চিত করা হয়।
- যখন বারবার স্ট্রিং পরিবর্তন করতে হয়, তখন StringBuilder বা StringBuffer ব্যবহার করা উচিত, কারণ সেগুলি mutable এবং তাদের মান পরিবর্তন করা যায়।
- String এর immutable হওয়া মেমরি এবং নিরাপত্তা বৃদ্ধিতে সহায়তা করে, বিশেষ করে বড় সফটওয়্যার অ্যাপ্লিকেশনগুলোতে যেখানে অনেক থ্রেড একসাথে কাজ করে।
Read more